K8S 1.26 跨命名空间存储数据源实践详解
关注公众号并添加到“星标⭐”,防止错过消息
后台回复【资料包】获取学习资料
上个月发布的 Kubernetes v1.26 引入了一项 alpha 功能,允许您为 PersistentVolumeClaim 指定数据源,即使源数据属于不同的命名空间。启用新功能后,您可以在新 PersistentVolumeClaim 的 dataSourceRef
字段中指定 namespace。一旦 Kubernetes 检查访问是正常的,新的 PersistentVolume 就可以从其他命名空间中指定的存储源填充其数据。
在 Kubernetes v1.26 之前,如果您的集群启用了该AnyVolumeDataSource
功能,您已经可以从同一集群中的相同命名空间数据源配置新卷。但是,这仅适用于同一命名空间中的数据源,因此用户无法使用其他命名空间中的数据源声明来供给 PersistentVolume。为了解决这个问题,Kubernetes v1.26 在 PersistentVolumeClaim API 的dataSourceRef
字段中添加了一个新的 alpha namespace
字段。
怎么运行?
一旦 csi-provisioner 发现指定的数据源dataSourceRef
具有非空 namespace 名称,它会检查 PersistentVolumeClaim 字段.spec.dataSourceRef.namespace
指定的命名空间内的所有引用授权,以查看访问数据源是否被允许。如果有任何 ReferenceGrant 允许访问,则 csi-provisioner 会从数据源中提供一个卷。
实践一下
使用跨命名空间卷配置需要以下内容:
为 kube-apiserver 和 kube-controller-manager 启用 AnyVolumeDataSource
和CrossNamespaceVolumeDataSource
功能门[1]为特定 VolumeSnapShot
控制器安装 CRD安装 CSI Provisioner 控制器并启用 CrossNamespaceVolumeDataSource
feature gate安装 CSI 驱动程序 为 ReferenceGrants 安装 CRD
结合起来
要查看其工作原理,您可以安装示例并进行试用。此示例通过 prod 命名空间中的 VolumeSnapshot 在 dev 命名空间中创建 PVC。这是一个简单的例子。对于实际使用过程中,您可能想要使用更复杂的方法。
这个例子假设
您的 Kubernetes 集群已部署,且 AnyVolumeDataSource
和CrossNamespaceVolumeDataSource
功能门控已启用有两个命名空间,dev 和 prod CSI 驱动程序已部署 在prod命名空间中存在一个名为 new-snapshot-demo
的现有 VolumeSnapshotReferenceGrant CRD(来自 Gateway API 项目)已经部署
Grant ReferenceGrants 对 CSI Provisioner 的读取权限
仅当 CSI 驱动程序具有CrossNamespaceVolumeDataSource
控制器功能时才需要访问 ReferenceGrants 。对于此示例,外部供应商需要 referencegrants (gateway.networking.k8s.io
API 组)的get、list和watch 权限。
- apiGroups: ["gateway.networking.k8s.io"]
resources: ["referencegrants"]
verbs: ["get", "list", "watch"]
为 CSI Provisioner 启用 CrossNamespaceVolumeDataSource feature gate
添加--feature-gates=CrossNamespaceVolumeDataSource=true
到 csi-provisioner 命令行。例如,使用此清单片段重新定义容器:
- args:
- -v=5
- --csi-address=/csi/csi.sock
- --feature-gates=Topology=true
- --feature-gates=CrossNamespaceVolumeDataSource=true
image: csi-provisioner:latest
imagePullPolicy: IfNotPresent
name: csi-provisioner
创建一个 ReferenceGrant
这是 ReferenceGrant 示例的清单。
apiVersion: gateway.networking.k8s.io/v1beta1
kind: ReferenceGrant
metadata:
name: allow-prod-pvc
namespace: prod
spec:
from:
- group: ""
kind: PersistentVolumeClaim
namespace: dev
to:
- group: snapshot.storage.k8s.io
kind: VolumeSnapshot
name: new-snapshot-demo
使用跨命名空间数据源创建 PersistentVolumeClaim
Kubernetes 在 dev 上创建一个 PersisentVolumeClaim,而 CSI 驱动程序从 prod 上的快照填充在 dev 上使用的 PersisentVolume。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: example-pvc
namespace: dev
spec:
storageClassName: example
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
dataSourceRef:
apiGroup: snapshot.storage.k8s.io
kind: VolumeSnapshot
name: new-snapshot-demo
namespace: prod
volumeMode: Filesystem
总结
该增强功能,建议阅读 Provision volumes from cross-namespace snapshots[2]包括有关此功能的历史和技术实现的大量详细信息。
参考资料
功能门: https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/
[2]Provision volumes from cross-namespace snapshots: https://github.com/kubernetes/enhancements/tree/master/keps/sig-storage/3294-provision-volumes-from-cross-namespace-snapshots
作者:Hitachi Vantara
出处:https://goo.gs/a2qjj
译者:#公众号:进击云原生
后台回复“加群”,带你进入高手交流群
Kubernetes 1.26 正式发布,所有变化都在这儿了!
10 张图详解 K8S 中部署 Ceph 与功能测试实战
使用 Vagrant + Kubespray 快速初始化 K8S 集群
万字长文细讲分布式存储系统 Ceph 实战操作
19 张图详细介绍分布式存储系统 Ceph 环境部署
K8S 1.26 这个新特性,支持大规模并行批处理工作负载
Docker Desktop 4.15 正式发布,这些新功能值得看
图解 K8S 1.26 新功能 Pod 调度就绪特性解析保姆级 Prometheus PromQL 讲解与实战操作
38 张图硬核高性能服务器架构设计与调优6 张配图通俗易懂说透 K8S 请求和限制18 张图 Java 容器化最佳实践总结17 张图实战 + 理清 K8S 网络排错思路,硬核!16 张图硬核讲解 Kubernetes 网络模型